﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://ac.nowcoder.com/acm/problem/229953
/*
题目描述：
链接：https://ac.nowcoder.com/acm/problem/229953
来源：牛客网

疫情来了，小红网购了
𝑛
n 个口罩。
众所周知，戴口罩是很不舒服的。小红每个口罩戴一天的初始不舒适度为
𝑎
𝑖
a
i
​
 。
小红有时候会将口罩重复使用（注：这是非常不卫生的！），每次重复使用时，该口罩的不舒适度会翻倍！
小红想知道，自己在不舒适度总和不超过
𝑘
k 的情况下，最多能用现有的口罩度过多少天？
输入描述:
第一行输入两个正整数
𝑛
n 和
𝑘
k ，分别代表口罩的总数、以及小红最多能忍受的不舒适度总和。
第二行输入
𝑛
n 个正整数
𝑎
𝑖
a
i
​
  ，用空格隔开。分别代表每个口罩初始的不舒适度。
1
≤
𝑛
≤
1
0
5
,
1
≤
𝑎
𝑖
,
𝑘
≤
1
0
9
1≤n≤10
5
 ,1≤a
i
​
 ,k≤10
9

输出描述:
一个整数，代表小红最多能度过的天数。
示例1
输入
复制
2 30
2 3
输出
复制
5
说明
第一天用第一个口罩，不舒适度为2。
第二天用第一个口罩，不舒适度为4。
第三天用第二个口罩，不舒适度为3。
第四天用第二个口罩，不舒适度为6。
第五天用第二个口罩，不舒适度为12。
总不舒适度为2+4+3+6+12=27，没有超过30。
可以证明，无论怎样分配，都无法度过6天且不舒适度总和不超过30
示例2
输入
复制
3 5
7 6 8
输出
复制
0
说明
显然，使用任何一个口罩都会使不舒适度超过5。
*/

// 开始解题：
// 方法——贪心 + 堆
#include <iostream>
#include <queue>
using namespace std;

int main() {
    int n = 0, k = 0;
    scanf("%d%d", &n, &k);
    priority_queue<int, vector<int>, greater<int>> heap;
    int x = 0;
    for (int i = 0; i < n; i++) {
        scanf("%d", &x);
        heap.push(x);
    }
    int ret = 0;
    while (true) {
        int cur = heap.top();
        heap.pop();
        k -= cur;
        if (k <= 0) {
            break;
        }
        ret++;
        heap.push(cur * 2);
    }
    cout << ret << endl;
    return 0;
}